/*
 * @lc app=leetcode.cn id=289 lang=java
 *
 * [289] 生命游戏
 */

// @lc code=start
class Solution {
    public void gameOfLife(int[][] board) {
        // 暴力解法---遍历每一个元素，统计周围的活细胞数量
        // 1. 用一个数组记录每个细胞周围的活细胞数量
        // 2. 根据规则更新每个细胞的状态
        int m = board.length, n = board[0].length;
        int[][] copy = new int[m][n];
        for(int i = 0; i < m; i++){
            for(int j = 0; j < n; j++){
                copy[i][j] = board[i][j];
            }
        }

        // 计算每个细胞周围的活细胞数量
        int count = 0;
        for(int i = 0; i < m; i++) {
            for(int j = 0; j < n; j++) {
                count = 0;
                for(int k = i-1; k <= i+1; k++) {
                    for(int l = j-1; l <= j+1; l++) {
                        if(k >= 0 && k < m && l >= 0 && l < n && !(k == i && l == j)) {
                            if(copy[k][l] == 1) {
                                count++;
                            }
                            
                        }
                    }
                }
                if(copy[i][j] == 1) {
                    if(count < 2 || count > 3) {
                        board[i][j] = 0;
                    }
                } else {
                    if(count == 3) {
                        board[i][j] = 1;
                    }
                }
            }
        }
    }
}
// @lc code=end

